home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 425_01 / tar / define.h < prev    next >
Text File  |  1994-04-02  |  7KB  |  273 lines

  1. /* define.h - global definitions for Tar program (see file tar.c)
  2.  * Author: Shaporev T.V.
  3.  * Creation date: 14 Dec 1990
  4.  */
  5. #ifdef __ALLOCEXT__
  6. #    define EXT
  7. #    define INI(x) = x
  8. #else
  9. #    define EXT extern
  10. #    define INI(x)
  11. #endif
  12.  
  13. #define TRUE     1
  14. #define FALSE    0
  15. #define ERROR    (-1)
  16. #define ERRARG   1
  17. #define ERINIT   2
  18. #define ERREAD   3
  19. #define EWRITE   4
  20. #define ESMALL   5
  21. #define EINTER   6
  22. #define EXIT     7
  23. #define CORRECT  0
  24. #define MAXBLOCK 32
  25. #define BLKSIZE  512
  26. #define MAXTNAME 100
  27. #define QUADISK  '\200'
  28. #define RAINBOW  '\201'
  29. #define dimof(x) (sizeof(x)/sizeof((x)[0]))
  30.  
  31. #ifndef RMKDIR
  32. #    ifdef M_XENIX
  33. #        define RMKDIR
  34. #    endif
  35. #endif
  36. #ifndef RMKDIR
  37. #    ifdef i386
  38. #        define RMKDIR
  39. #    endif
  40. #    ifdef sun
  41. #        define RMKDIR
  42. #    endif
  43. #endif
  44.  
  45. #ifdef MSDOS
  46. #    include <fcntl.h>
  47. #endif
  48. #ifdef __TURBOC__
  49. #       define NO_REALLOC /* stupid runtime can't shrink a block */
  50. #    define write _write
  51. #    define read  _read
  52. #else
  53. #       include <sys/types.h>
  54. #endif
  55. #include <sys/stat.h>
  56. #ifndef S_IREAD
  57. #      define S_IREAD  00400
  58. #    define S_IWRITE 00200
  59. #    define S_IEXEC  00100
  60. #endif
  61. #ifndef S_ISVTX
  62. #    define S_ISUID 04000
  63. #    define S_ISGID 02000
  64. #    define S_ISVTX 01000
  65. #endif
  66. #ifndef O_RDONLY
  67. #    define O_RDONLY 0
  68. #    define O_WRONLY 1
  69. #    define O_RDWR   2
  70. #    define O_BINARY 0
  71. #endif
  72.  
  73. EXT struct stat sa, st;
  74. EXT long longcsum, codesize, allblock, allbytes;
  75. EXT short dmajor, dminor;
  76. EXT int allfiles;
  77. #define isfile ((sa.st_mode & S_IFMT) == S_IFREG)
  78. EXT short ndrive;
  79. #ifdef MSDOS
  80. #    define DEV_FILE 0
  81. #    define DEV_FLOP 1
  82. #    define DEV_QIC2 2
  83.     EXT char devtype INI(DEV_FILE);
  84.     EXT char setdrive INI(FALSE);
  85. #endif
  86.  
  87. #ifdef UNIX
  88.     EXT FILE *myinp;
  89. #else
  90. #    define myinp stdin
  91. #endif
  92. EXT FILE *myout;
  93. EXT int  handle, hwrite;
  94. EXT char a_flag, x_flag, t_flag, c_flag, v_flag, u_flag, y_flag, w_flag,
  95.          i_flag, m_flag, d_flag, j_flag, s_flag, nonest, dslash, o_flag,
  96.          l_flag, cbreak;
  97. #ifdef UNIX
  98.     EXT char p_flag;
  99. #endif
  100.  
  101. #ifdef MSDOS
  102.     EXT char k_flag, deldrv;
  103.     EXT int filemask;
  104.     EXT char *archname INI(NULL);
  105. #endif
  106.  
  107. EXT char pktype;
  108. EXT int pklevel;
  109. #define PKNONE 0
  110. #define PKLZH  1
  111. #define PKfLZW 2
  112. #define PKpLZW 3
  113. #define PKZIP  4
  114.  
  115. /* Standard tar file type flags */
  116. #define TF_OLD '\0' /* old-fashion flag - regular file */
  117. #define TF_REG '0'  /* regular file */
  118. #define TF_LNK '1'  /* link */
  119. #define TF_SYM '2'  /* symbolic link */
  120. #define TF_CHR '3'  /* character device */
  121. #define TF_BLK '4'  /* block device */
  122. #define TF_DIR '5'  /* directory */
  123. #define TF_QUE '6'  /* FIFO special */
  124. #define TF_CTG '7'  /* contiguous file */
  125.  
  126. /* GNU extensions */
  127. #define GF_DMP 'D'  /* This is a dir entry that contains
  128.                        the names of files that were in the
  129.                        dir at the time the dump was made */
  130. #define GF_LLN 'K'  /* Identifies the NEXT file on the tape
  131.                        as having a long linkname */
  132. #define GF_LNM 'L'  /* Identifies the NEXT file on the tape
  133.                        as having a long name. */
  134. #define GF_MUL 'M'  /* This is the continuation of a file
  135.                        that began on another volume */
  136. #define GF_NAM 'N'  /* For storing filenames that didn't
  137.                        fit in 100 characters */
  138. #define GF_SPR 'S'  /* This is for sparse files */
  139. #define GF_VOL 'V'  /* This file is a tape/volume header */
  140.  
  141. #define TMAGIC "ustar  "
  142. #define GMAGIC "GNUtar "
  143.  
  144. #define TXT_WORD 8
  145. #define TXT_LONG 12
  146.  
  147. #ifdef M_XENIX
  148.     #pragma pack(1)
  149. #endif
  150. struct header {
  151.    char name[MAXTNAME];
  152.    char mode[TXT_WORD];
  153.    char uid[TXT_WORD];
  154.    char gid[TXT_WORD];
  155.    char size[TXT_LONG];
  156.    char mtime[TXT_LONG];
  157.    char chksum[TXT_WORD];
  158.    char filetype;
  159.    char linkname[MAXTNAME];
  160.    union {
  161.       struct {/* old-fashion data & padding */
  162.          char comment[BLKSIZE-MAXTNAME-8-8-8-12-12-8-1-MAXTNAME-12-12];
  163.          char srcsum[TXT_LONG];
  164.          char srclen[TXT_LONG];
  165.       } old;
  166.       struct {/* System V extensions */
  167.          char extent[4];
  168.          char allext[4];
  169.          char total[TXT_LONG];
  170.       } s_v;
  171.       struct {/* P1003 & GNU extensions */
  172.          char magic[8];
  173.          char uname[32];
  174.          char gname[32];
  175.          char devmajor[TXT_WORD];
  176.          char devminor[TXT_WORD];
  177.          /* the following fields are added gnu and NOT standard */
  178.          char    atime[12];
  179.          char    ctime[12];
  180.          char    offset[12];
  181.       } new;
  182.    } x;
  183. };
  184.  
  185. struct node {
  186.     struct node *prev, *next;
  187.         union {
  188.         long time;
  189.         struct {
  190.             int inode, device, count;
  191.         } data;
  192.     } info;
  193.         char name[MAXTNAME];
  194. };
  195.  
  196. #define pkfile (pktype == PKLZH || pktype == PKfLZW)
  197. #define PKSIZE (8*BLKSIZE)
  198. EXT int pksize INI(PKSIZE);
  199. EXT char *pk_inp INI(NULL), *pk_out INI(NULL);
  200.  
  201. EXT char *io_buf, *io_2nd;
  202. EXT int cblock;
  203.  
  204. EXT struct header *hblock;
  205. EXT char *scratch;
  206.  
  207. #define NONE (struct node *)0
  208. EXT struct node *timehead INI(NONE);
  209. #ifdef UNIX
  210.     EXT struct node *linkhead INI(NONE);
  211. #endif
  212.  
  213. #ifndef MSDOS
  214. #    define takename(a,b) (void)strcpy((a),(b))
  215. #endif
  216.  
  217. int   yes_no   __ARGS__(( char ));
  218. #define YES_NO() yes_no('N')
  219.  
  220. void  outmem   __ARGS__(( FILE* ));
  221. char  *salloc  __ARGS__(( int ));
  222. char  *getbuf  __ARGS__(( int ));
  223. void  done     __ARGS__(( int ));
  224. int   initape  __ARGS__(( char* ));
  225. int   runtape  __ARGS__(( void ));
  226. void  duptape  __ARGS__(( char* ));
  227. void  prmode   __ARGS__(( char, int ));
  228. int   okwork   __ARGS__(( char, char, struct stat *, char* ));
  229. void  cantopen __ARGS__(( char* ));
  230. void  savefile __ARGS__(( char* ));
  231. void  store    __ARGS__(( char* ));
  232. char  prefix   __ARGS__(( void ));
  233. int   usize    __ARGS__(( void ));
  234. short isextent __ARGS__(( short *, long *));
  235. int   ismagic  __ARGS__(( void ));
  236. void  catalog  __ARGS__(( void ));
  237. void  extract  __ARGS__(( void ));
  238. int   restore  __ARGS__(( char*));
  239. void  makelink __ARGS__(( char*, char* ));
  240. void  acctime  __ARGS__(( void ));
  241. void  uplist   __ARGS__(( void ));
  242. int   gethead  __ARGS__(( void ));
  243. int   inargs   __ARGS__(( int, char**, char* ));
  244. void  scantape __ARGS__(( int, char**, void(*)() ));
  245. void  backtape __ARGS__(( void ));
  246. void  extwrerr __ARGS__(( void ));
  247. struct header *readtape  __ARGS__(( void ));
  248. short headsum  __ARGS__(( struct header * ));
  249. struct header *steptape  __ARGS__(( void ));
  250. void  writebyte __ARGS__(( int ));
  251. int   writearch __ARGS__(( int, long, char* ));
  252. void  nullblock __ARGS__(( struct header * ));
  253. void  endtape  __ARGS__(( void ));
  254. int   readbyte __ARGS__(( void ));
  255. void  bacouple __ARGS__(( void ));
  256. int   readarch __ARGS__(( int, long ));
  257. struct node *finditem __ARGS__(( char*, struct node **, struct node * ));
  258. struct node *additem  __ARGS__(( char*, struct node *, struct node ** ));
  259. void  delitem  __ARGS__(( struct node *, struct node ** ));
  260. void  skipfile __ARGS__(( void ));
  261. void  percent  __ARGS__(( long, long ));
  262. #ifdef MSDOS
  263.     int    argdisk  __ARGS__(( int ));
  264.     void   inidisk  __ARGS__(( void ));
  265.     int    defdev   __ARGS__(( char* ));
  266.     void   logdisk  __ARGS__(( int, char*, int ));
  267.     void   takename __ARGS__(( char*, char* ));
  268.  
  269.     int    streamer __ARGS__(( int, void*, int ));
  270.     long   ptr2abs  __ARGS__(( void far * ));
  271.     void   qend     __ARGS__(( void ));
  272. #endif
  273.